package org.example.service;

import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.Base64;
import org.springframework.stereotype.Service;

import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.util.List;

public class WordExportService {
    // 工具数据实体（示例）
    static class Tool {
        String code, storageLoc, assetOwner, nameModel;

        public Tool() {
        }

        public Tool(String code, String storageLoc, String assetOwner, String nameModel) {
            this.code = code;
            this.storageLoc = storageLoc;
            this.assetOwner = assetOwner;
            this.nameModel = nameModel;
        }
    }

    // 主方法：导出Word
    public static void exportWord(List<Tool> tools) throws Exception {
        // 1. 加载Word模板
        XWPFDocument doc = new XWPFDocument(new FileInputStream("D:\\exported_tools.docx"));

        // 2. 获取表格（假设模板中只有一个表格）
        XWPFTable table = doc.getTables().get(0);

        // 3. 遍历工具数据，填充表格行
        int rowIdx = 0; // 行索引（2×3网格，每行2个单元格）
        for (int i = 0; i < tools.size(); i++) {
            Tool tool = tools.get(i);
            // 每2个工具换行（2×3网格）
            if (i % 2 == 0) {
                rowIdx++; // 换行
            }
            // 获取当前单元格（2×3网格，列索引为i%2）
            XWPFTableCell cell = table.getRow(rowIdx).getCell(i % 2);

            // 3.1 插入二维码（示例：用base64编码的二维码图片）
            String qrBase64 = "your_qr_base64_string"; // 替换为实际二维码base64
            XWPFRun run = cell.getParagraphs().get(0).createRun();
            run.addPicture(
                    new ByteArrayInputStream(Base64.getDecoder().decode(qrBase64)),
                    XWPFDocument.PICTURE_TYPE_PNG, "qr.png", 100, 100 // 宽高100px
            );

            // 3.2 填充文字（替换占位符）
            XWPFParagraph para = cell.getParagraphs().get(1); // 假设文字在第2段
            XWPFRun run1 = para.createRun();
            run1.setText(String.format(
                    "编码：%s\n保管地点：%s\n资产归属：%s\n名称型号：%s",
                    tool.code, tool.storageLoc, tool.assetOwner, tool.nameModel
            ));
        }

        // 4. 保存Word文件
        doc.write(new FileOutputStream("D:\\exported_tools.docx"));
        doc.close();
    }

    public static void main(String[] args) throws Exception {
        // 示例工具数据
        List<Tool> tools = Arrays.asList(
                new Tool("01708000000000005418996", "输电运检中心输电带电一班工器具室", "国网商丘供电公司-输电运检中心", "安全带-全身式,z-坠落悬挂"),
                new Tool("017080000000000051297", "汤阴变安全工器具室", "国网安阳供电公司-变电运维中心", "安全带-半身式,z-坠落悬挂"),
                new Tool("017080000000000051297", "汤阴变安全工器具室", "国网安阳供电公司-变电运维中心", "安全带-半身式,z-坠落悬挂"),
                new Tool("017080000000000051297", "汤阴变安全工器具室", "国网安阳供电公司-变电运维中心", "安全带-半身式,z-坠落悬挂")

        );
        exportWord(tools);
    }
}
